# -*- encoding: utf-8 -*-

from PyQt4.QtGui import QApplication
from ui.mainwindow import MainWindow
import re
import logging
import apina
import scripts
from nogui import NoGui

def load_script(name):
    """
    Lataa scripts-alihakemistosta (tai sen alihakemistosta) moduulin tiedostosta nimeltä `name`.py ja palauttaa sen.
    """
#    try:
    print "importataan: " + name
    pkg = __import__(name)
 #   except ImportError:
#    return None
    parts = name.split(".")

    for i in xrange(-len(parts)+1, -1):
        pkg = getattr(pkg, parts[i])

    mod = getattr(pkg, parts[-1])
    return mod


def initialize(script):
    """
    Loggautuu ja pyytää listan muokkausskriptiltä.
    """

    tunnus = None

    info = script.login()

    if 'endpoint' not in info:
        print "Virhe: apin osoite puuttuu."
        return (False,  None, None, None)
        
    api = apina.Apina(info['endpoint'])
    
    if 'user' not in info or info['user'] == "" \
            or 'password' not in info or info['password'] == "":
        print "Ei kirjauduta sisään. Käyttäjätunnus tai salasana puuttuu."
    else:
        if not api.login(info['user'], info['password']):
            print "Virhe: kirjautuminen epäonnistui."
            return (False,  None, None, None)

        tunnus = info['user']
        print "Kirjautuminen onnistui."

    # Haetaan lista.
    lst = script.init(api)
    if not lst:
        print "Virhe: lista puuttuu."
        return (False,  None, None, None)
        
    # Tallennetaan listaan tieto editointiskriptistä, koska se 
    # kutsuu skriptin edit-funktiota suoraan.
    lst.set_script(script)
  
    return (True, tunnus, lst, api)

    
def main():
    import sys
    logging.basicConfig(filename=u"hunsbot.log", level=logging.DEBUG)
    app = QApplication(sys.argv)

    if len(sys.argv) != 2:
        print u"Käyttö: {0} <skriptitiedosto>".format(sys.argv[0])
        exit(0)

    modname = sys.argv[1].replace("/", ".")
    if modname.endswith(".py"): modname = modname[:-3]
    mod = load_script(modname)
    if mod == None:
        print u"Moduulia {0} ei ole.".format(modname)
        exit(1)

    ret, user, lst, api = initialize(mod)
    if ret:
        if not user: user = u"<i>ei kirjauduttu</i>"
        else: user = u"<b>" + user + "</b>"
        lst.set_api(api)
        wnd = MainWindow()
        wnd.set_login(user)
        wnd.set_list(lst)
        
        wnd.show()

        exval = app.exec_()

#        exval = 0
#        srv = NoGui()
#        srv.set_login(user)
#        srv.set_list(lst)
#        srv.run()

        lst.tulosta_ryhmat()
        sys.exit(exval)


if __name__ == '__main__':
    main()

    
